package org.review.datastructure;

import java.util.Objects;


/**
 * 数组按照二叉树的前序 中序 后续遍历
 *  顺序存储二叉树的特点:
 * 1) 顺序二叉树通常只考虑完全二叉树
 * 2) 第 n 个元素的左子节点为 2 * n + 1
 * 3) 第 n 个元素的右子节点为 2 * n + 2
 * 4) 第 n 个元素的父节点为 (n-1) / 2
 * 5) n : 表示二叉树中的第几个元素(按 0 开始编号如图所示)
 */
public class ArrBinaryTree {
    private int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.preOrder();


    }

    public void preOrder() {
        if (Objects.nonNull(arr) && arr.length > 0) {
            this.preOrder(0);
        } else {
            System.out.println("数组是空");
        }
    }

    //完成顺序存储二叉树的前序遍历
    public void preOrder(int i) {
        System.out.println(arr[i]);

        if ((i * 2) + 1 < arr.length) {
            preOrder((i * 2) + 1);
        }
        if ((i * 2) + 2 < arr.length) {
            preOrder((i * 2) + 2);
        }
    }


}


